<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  
  <script type="text/javascript">
    /*
      Promise常用API-对象方法
      Promise.all() 方法接收一个 promise 的 iterable 类型（注：Array，Map，Set 都属于 ES6 的 iterable 类型）的输入，并且只返回一个Promise实例，那个输入的所有 promise 的 resolve 回调的结果是一个数组。
    */
    function promiseFunc(url) {
      return new Promise(function(resolve, reject) {
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
          if(xhr.readyState != 4) return;
          if(xhr.readyState == 4 && xhr.status == 200) {
            // 处理正常的情况
            resolve(xhr.responseText);
          }else{
            // 处理异常情况
            reject('服务器错误');
          }
        };
        xhr.open('get', url);
        xhr.send(null);
      });
    }

    const p1 = promiseFunc('http://localhost:8082/a1');
    const p2 = promiseFunc('http://localhost:8082/a2');
    const p3 = promiseFunc('http://localhost:8082/a3');
    
    /* 
      返回值是数组：结果是promise执行成功后的数据。
      all:["wait 1 seconds response", "wait 2 seconds response", "wait 3 seconds response"]
    */
  /*   Promise.all([p1,p2,p3]).then(function(result) {
      console.log(result);
    }) */

    /* 
      返回的是：响应最快Promise的结果作为最终的结果。
      wait 1 seconds response

    */
    Promise.race([p1,p2,p3]).then(function(result){
      console.log(result)
    })
  </script>
</body>
</html>